package com.cuiweiyou.contactsfromfile;

import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Data;
import android.text.TextUtils;
import android.util.Log;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by macpro on 2018/3/3.
 */

public class ContactUtil {

    public static List<String> getContactsFromFile(String path) {
        if (!TextUtils.isEmpty(path)) {
            File f = new File(path);
            if (f.exists()) {
                return getContactsFromFile(f);
            }
        }

        return null;
    }

    public static List<String> getContactsFromFile(File file) {

        StringBuffer sb = new StringBuffer();
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line = "";
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
            br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        Map<String, String> map = new HashMap<>();

        try {
            String str = sb.toString();
            String[] split = str.split(";");
            for (int i = 0; i < split.length; i++) {
                String number = split[i].replace(" ", "");
                map.put(number, "");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        List<String> list = new ArrayList<>(map.keySet());
        return list;
    }

    public static void inject(Context context, List<String> contacts, Handler handler) {

        // todo 先查询通讯录，插入时判断是否存在

        for (int i = 0; i < contacts.size(); i++) {
            String number = contacts.get(i);

            ContentValues values = new ContentValues(); // 创建一个空的ContentValues

            // 向RawContacts.CONTENT_URI空值插入，
            // 先获取Android系统返回的rawContactId
            // 后面要基于此id插入值
            Uri rawContactUri = context.getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);
            long rawContactId = ContentUris.parseId(rawContactUri);

            values.clear();
            values.put(Data.RAW_CONTACT_ID, rawContactId);
            values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);     // 内容类型
            values.put(StructuredName.GIVEN_NAME, number);                   // 联系人名字
            context.getContentResolver().insert(Data.CONTENT_URI, values);   // 向联系人URI添加联系人名字

            values.clear();
            values.put(Data.RAW_CONTACT_ID, rawContactId);
            values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
            values.put(Phone.NUMBER, number);                             // 联系人的电话号码
            values.put(Phone.TYPE, Phone.TYPE_MOBILE);                    // 电话类型
            context.getContentResolver().insert(Data.CONTENT_URI, values);// 向联系人电话号码URI添加电话号码

            values.clear();
            values.put(Data.RAW_CONTACT_ID, rawContactId);
            values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
            values.put(Email.DATA, "vigiles@163.com");                     // 联系人的Email地址
            values.put(Email.TYPE, Email.TYPE_WORK);                       // 电子邮件的类型
            context.getContentResolver().insert(Data.CONTENT_URI, values); // 向联系人Email URI添加Email数据

            Message message = handler.obtainMessage();
            message.obj = number;
            handler.sendMessage(message);
        }
    }

    // 不可用
    @Deprecated
    public static void inject2(Context context, List<String> contacts, Handler handler) {
        Log.e("ard", "开始导入---------------------");

        // 系统的内容使用者
        ContentResolver resolver = context.getContentResolver();

        // 须要操作的2个表
        Uri conturi = Uri.parse("content://com.android.contacts/raw_contacts"); // 联系人表
        Uri datauri = Uri.parse("content://com.android.contacts/data");         // 通讯记录表

        // 查询联系人最大“id”
        Cursor tmpcursor = resolver.query(conturi, new String[]{"contact_id"}, null, null, "contact_id desc limit 1");

        if (tmpcursor != null && tmpcursor.moveToFirst()) {

            int id = tmpcursor.getInt(0);
            tmpcursor.close();

            for (int i = 0; i < contacts.size(); i++) {

                id += i;

                String contactBean = contacts.get(i);

                ContentValues value = new ContentValues();
                value.put("contact_id", id);       // 手机号码
                resolver.insert(conturi, value);   // 联系人列表插入记录

                value = new ContentValues();
                value.put("mimetype", "vnd.android.cursor.item/phone_v2"); // 电话。不是mimetype_id，bug？
                value.put("data1", contactBean);
                value.put("raw_contact_id", id);
                resolver.insert(datauri, value);   // 通讯录插入记录

                value = new ContentValues();
                value.put("mimetype", "vnd.android.cursor.item/name"); // 姓名
                value.put("data1", contactBean);
                value.put("raw_contact_id", id);

                resolver.insert(datauri, value);   // 通讯录插入记录

                Message message = handler.obtainMessage();
                message.obj = contactBean;
                handler.sendMessage(message);
            }
        }
    }
}
